package collection.test;

import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

public class CollectionUtil {
    public static void main(String[] args) {
//        - reverse(List)：反转 List 中元素的顺序
        List<Integer> objects = new LinkedList<>();
        objects.add(8);
        objects.add(9);
        objects.add(1);
        objects.add(2);
        objects.add(3);
        System.out.println(objects);
//        Collections.reverse(objects);

//- shuffle(List)：对 List 集合元素进行随机排序
//        Collections.shuffle(objects);


//- sort(List)：根据元素的自然顺序对指定 List 集合元素按升序排序
//        Collections.sort(objects);
//        System.out.println(objects);
//- sort(List，Comparator)：根据指定的 Comparator 产生的顺序对 List 集合元素进行排序
//- swap(List，int， int)：将指定 list 集合中的 i 处元素和 j 处元素进行交换 i与j都是索引
//        Collections.swap(objects, 0, 3);
//        System.out.println(objects);

//
//查找
//- Object max(Collection)：根据元素的自然顺序，返回给定集合中的最大元素
        System.out.println(Collections.max(objects));
//- Object max(Collection，Comparator)：根据 Comparator 指定的顺序，返回给定集合中的最大元素
//- Object min(Collection)：根据元素的自然顺序，返回给定集合中的最小元素
        System.out.println(Collections.min(objects));
//- Object min(Collection，Comparator)：根据 Comparator 指定的顺序，返回给定集合中的最小元素
//- int binarySearch(List list,T key)在List集合中查找某个元素的下标，但是List的元素必须是T或T的子类对象，而且必须是可比较大小的，即支持自然排序的。而且集合也事先必须是有序的，否则结果不确定。
        System.out.println(Collections.binarySearch(objects, 9));
//- int binarySearch(List list,T key,Comparator c)在List集合中查找某个元素的下标，但是List的元素必须是T或T的子类对象，而且集合也事先必须是按照c比较器规则进行排序过的，否则结果不确定。
//- int frequency(Collection c，Object o)：返回指定集合中指定元素的出现次数
        System.out.println(Collections.frequency(objects, 9));
//
//复制、替换
//- void copy(List dest,List src)：将src中的内容复制到dest中
        List<Integer> ob = new LinkedList<>();
        System.out.println(objects);
        System.out.println(ob);
//        collections.copy(目标集合, 数据源集合);
//        Collections.copy(ob, objects);
//- boolean replaceAll(List list，Object oldVal，Object newVal)：使用新值替换 List 对象的所有旧值
//        Collections.replaceAll(objects, 9, 20);
//        System.out.println(objects);
//- 提供了多个unmodifiableXxx()方法，该方法返回指定 Xxx的不可修改的视图。

//
//添加
//- boolean addAll(Collection  c,T... elements)将所有指定元素添加到指定 collection 中。
        Collections.addAll(objects, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
        System.out.println(objects);
//
//同步
//- Collections 类中提供了多个 synchronizedXxx() 方法，该方法可使将指定集合包装成线程同步的集合，从而可以解决多线程并发访问集合时的线程安全问题
        List<Integer> objects1 = Collections.synchronizedList(objects);
        System.out.println(objects1);
    }
}
